<template>
  <div>
    <div class="demo-upload-list" v-for="(item,key) in uploadList" :key="key">
      <template v-if="item.status === 'finished'">
        <img :src="item.url">
        <div class="demo-upload-list-cover">
          <Icon type="ios-eye-outline" @click.native="handleView(item.url)"></Icon>
          <Icon type="ios-trash-outline" @click.native="handleRemove(item)"></Icon>
        </div>
      </template>
      <template v-else>
        <Progress v-if="item.showProgress" :percent="item.percentage" hide-info></Progress>
      </template>
    </div>
    <Upload
      ref="upload"
      :show-upload-list="false"
      :default-file-list="defaultImages"
      :on-success="handleSuccess"
      :format="['jpg','jpeg','png','ico','webp']"
      :max-size="2048"
      :on-format-error="handleFormatError"
      :on-exceeded-size="handleMaxSize"
      :before-upload="handleBeforeUpload"
      type="drag"
      :action="action"
      style="display: inline-block;width:58px;">
      <div style="width: 58px;height:58px;line-height: 58px;">
        <CommonIcon type="_iconfont icon-xiangji" :size="20"></CommonIcon>
      </div>
    </Upload>
    <Modal title="查看图片" v-model="visible">
      <img :src="imgName" v-if="visible" style="width: 100%">
    </Modal>
  </div>
</template>
<script>
import config from '@/config'
import CommonIcon from '_c/common-icon/common-icon'
// import { getUploadToken } from '@/api/upload'

const baseUrl = process.env.NODE_ENV === 'development' ? config.baseUrl.dev : config.baseUrl.pro
export default {
  components: { CommonIcon },
  props: {
    imagesList: {
      type: Array,
      required: true
    },
    action: {
      default: baseUrl + 'upload/picture'
    }
  },
  data () {
    return {
      imgName: '',
      visible: false,
      uploadList: [],
      defaultImages: this.imagesList
    }
  },
  methods: {
    handleView (name) {
      this.imgName = name
      this.visible = true
    },
    handleRemove (file) {
      const fileList = this.$refs.upload.fileList
      this.$refs.upload.fileList.splice(fileList.indexOf(file), 1)
      this.$emit('imagesChange', this.$refs.upload.fileList)
    },
    handleSuccess (res, file) {
      file.url = res.data.url
      file.name = res.data.name
      this.$emit('imagesChange', this.uploadList)
    },
    handleFormatError (file) {
      this.$Notice.warning({
        title: 'The file format is incorrect',
        desc: 'File format of ' + file.name + ' is incorrect, please select jpg or png.'
      })
    },
    handleMaxSize (file) {
      this.$Notice.warning({
        title: 'Exceeding file size limit',
        desc: 'File  ' + file.name + ' is too large, no more than 2M.'
      })
    },
    handleBeforeUpload (request) {
      return true
      // return new Promise((resolve, reject) => {
      //   getUploadToken().then(response => {
      //     this.uploadData.push({
      //       key: this.generateUUID() + '_' + request.name,
      //       token: response.data.data.token
      //     })
      //     this.uri = response.data.data.uri
      //     resolve()
      //   })
      // })
    }
  },
  mounted () {
    this.uploadList = this.$refs.upload.fileList
  }
}
</script>
<style>
.demo-upload-list{
  display: inline-block;
  width: 60px;
  height: 60px;
  text-align: center;
  line-height: 60px;
  border: 1px solid transparent;
  border-radius: 4px;
  overflow: hidden;
  background: #fff;
  position: relative;
  box-shadow: 0 1px 1px rgba(0,0,0,.2);
  margin-right: 4px;
}
.demo-upload-list img{
  width: 100%;
  height: 100%;
}
.demo-upload-list-cover{
  display: none;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0,0,0,.6);
}
.demo-upload-list:hover .demo-upload-list-cover{
  display: block;
}
.demo-upload-list-cover i{
  color: #fff;
  font-size: 20px;
  cursor: pointer;
  margin: 0 2px;
}
</style>
